<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1,Promise 构造函数 ： Promise（excutor）{}
        // excutor : 执行器函数， 同步执行立即调用，接受两个参数 resolve ， reject 
        // resolve : 内部定义成功时我们调用的回调函数， value =>{};
        // reject  : 内部定义失败时我们调用的回调函数 ， reason  => {};

        //2.Promise.prototype.then  (onResolved, onRejected)=>{} 
        // onResolved函数 ： 成功的回调函数    value =>{};
        // onRejected函数： 失败的回调函数         reason  => {};
        //    .then() 要返回一个新的Promise对象， 这是链式调用的关键

        //3.Promise.prototype.catch (onRejected=>{})
        //   onRejected函数： 失败的回调函数         reason  => {};
        // then()的语法糖    相当于 .then(undefinde, onRejected)

        // Promise.all()
              // 包含n个promis实例的数组
              // 返回一个新的promise 只有当所有的promise都成功才算成功，有一个失败就算失败
        // Promise.race()
             // 包含n 个promise的数组
             // 返回一个新的promise 第一个完成的promise的结果状态就是最终的状态。
        
        new Promise((resolve,reject)=>{
            setTimeout(()=>{
                //resolve("-----成功的数据")  //结果只有一种状态
                reject("-----失败的数据")
            },1000)
        })
        .then(
            value =>{
                console.log("onResolved()1" , value)
            }
        )
        .catch(
            reason =>{
                console.log("onRejected()1" , reason)
            }
        )


        //产生一个成功值为1的promise对象

        const p1 =  new  Promise ((resolve, reject)=>{
            resolve(1)
        })

        // 利用Promise.resolve() 语法糖产生一个成功值为2的 promise对象
        const  p2 = Promise.resolve(2)

        //利用语法糖产生失败值为3的promise对象

        const p3 = Promise.reject(3)

        // 利用then()处理产生的值
        p1.then(
            value =>{ 
                console.log(value)
            }
        )

        p2.then(
            value=>{
                console.log(value)
            }
        )

        p3.catch(
            reason=>{
                console.log(reason)
            }
        )
        p3.then(undefined,  reason=>{
                console.log(reason)
            })
    </script>
</body>
</html>